package com.inspur.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.web.client.RestTemplate;

/**
 *    
 * 入口
 *
 * @desc:
 * @author: li.peng02
 * @date: 2019/3/13
 * @version: v1.0 
 */
@SpringBootApplication
@EnableEurekaClient
public class CustomerRibbonApplication {

    /**
     * 带有负载均衡的RestTemplate
     *
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate balanceRestTemplate() {
        return new RestTemplateBuilder().build();
    }

    /**
     * 不带负载均衡的RestTemplate
     * <p>
     * ================关于@Primary的说明=======================
     * 当存在多个相同类型的bean时，使用@Primary给bean更高的优先级。
     * 这里如果不使用该注解，Spring会抛出NoUniqueBeanDefinitionException。
     * 如果不指定注入的bean名称，默认情况下带有@Primary的bean会被注入。
     * ========================================================
     *
     * @return
     */
    @Bean
    @Primary
    public RestTemplate noBalanceRestTemplate() {
        return new RestTemplateBuilder().build();
    }

    public static void main(String[] args) {
        SpringApplication.run(CustomerRibbonApplication.class, args);
    }
}
